12 February 2022

CTD casts from eDNA sampling off the Sashin on 10 May, 2021.

library(tidyr)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(readr)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(stringr)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(lubridate)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(hms)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(dplyr)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(ggplot2)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(RColorBrewer)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
library(lubridateExtras)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# read in all files in the reheaded directory
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# dataFiles <- lapply(Sys.glob("CTDCasts/reheaded/*.csv"), read_csv)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# # turn each of the data frames in that list into a single data frame
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.data <- do.call("rbind", dataFiles)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist <- read_csv("../data/ctdDataframe.csv") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(distance != 100)
Rows: 2538 Columns: 16── Column specification ──────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr   (2): ctd_sample, tide
dbl  (13): lat, long, depth_m, salinity, density, pressure_decibar, temp_c, conductivity, sp_c...
dttm  (1): time
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# organize the headers, etc.
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.data2 <- ctd.data %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   rename(pressure_decibar = `Pressure (Decibar)`, depth_m = `Depth (Meter)`, temp_c = `Temperature (Celsius)`, conductivity = `Conductivity (MicroSiemens per Centimeter)`, sp_conduct = `Specific conductance (MicroSiemens per Centimeter)`, salinity = `Salinity (Practical Salinity Scale)`, sound_velocity = `Sound velocity (Meters per Second)`, density = `Density (Kilograms per Cubic Meter)`, file = `% File name`, lat = `% Start latitude`, long = `% Start longitude`, duration = `% Cast duration (Seconds)`, time = `% Cast time (local)`) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   separate(file, into = c(NA, NA, "ctd_sample"), sep = "_") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   select(ctd_sample, time, lat, long, depth_m, salinity, density, pressure_decibar, temp_c, conductivity, sp_conduct, sound_velocity, duration)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# # add tide info
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.w.tides <- ctd.data2 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   mutate(tide = ifelse(hour(hms::as_hms(time)) >12, "PM_outgoing", "AM_incoming"))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.w.tides %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   select(lat) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   unique() %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   arrange(lat)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Convert longitude to meters from chum pens

This will match the other plots in the series.

# meta <- read_csv("../metadata/amalga_clean_metadata.csv")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# dist <- meta %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   filter(!is.na(distance)) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   arrange(distance) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   select(distance) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   unique()
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# dist2x <- dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   bind_rows(dist)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# # each cast (ctd_sample) represents one of the 80m sampling intervals
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.w.dist <- ctd.w.tides %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   arrange(time) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   select(time) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   unique() %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   mutate(id = row_number()) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   bind_cols(dist2x)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# # bind it back together
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ctd.w.tides.dist <- ctd.w.tides %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   left_join(., ctd.w.dist)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# QC: are the data what we think they are?
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = long, y = lat, color = tide, linetype = tide, label = ctd_sample)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
 # geom_line() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  #geom_point(size = 0.1)+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_text(size = 2.5)+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Latitude",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Longitude") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_color_manual(values = c("firebrick1", "midnightblue"))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdSimpleLatLon.pdf")
Saving 7.29 x 4.51 in imageError in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Output that dataframe so that I can plot the transect on the bathy map

# ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   write_csv("csv_outputs/ctdDataframe.csv")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Ultimately, turn this into a map of the transect rather than an x-y plot.

max/min surface water temperature vs. at depth

ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  #filter(distance == 0) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = temp_c, y = -1*depth_m, color = tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point()
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m > 9 & depth_m < 11) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarise(min(temp_c))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(tide) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m > 1) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarise(min(temp_c))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Plotting CTD profiles

# salinity
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(salinity > 20) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = density, y = -1*(depth_m), color = distance)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Density",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Distance")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#ggsave("pdf_outputs/ctdSalinityProfile.pdf", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Salinity: zoomed in

# temp
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    filter(salinity > 20) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 10) %>% # top three meters of the surface
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = density, y = -1*(depth_m), color = distance)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Density (kg/m^3)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Distance (m)")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

#ggsave("pdf_outputs/ctdSalinityProfile5m.pdf", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Plotting a surface with temperature and longitude

https://github.com/cathmmitchell/plottingOceanDataWithR/wiki/Irregular-data

binned <- ctd.w.tides.dist %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 10) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate_at(5, round)%>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(distance, tide, depth_m) %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarize(av_tmp = mean(temp_c))
`summarise()` has grouped output by 'distance', 'tide'. You can override using the `.groups` argument.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# flip order so higher temps are at the top!
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
binned
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tempplot <- ggplot(binned,aes(x=distance,y=-1*(depth_m))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide))+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_contour_filled(aes(z=av_tmp), alpha = 0.8) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    geom_point(size =0.1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Distance from hatchery pens (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       fill = "Temperature (C)") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_x_continuous(expand = c(0,0)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_y_continuous(expand = c(0,0.05)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_fill_brewer(palette = "Spectral", direction = -1,
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                    guide = guide_legend(reverse = T))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tempplot
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdTemp10metersDistance.png", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Why do some of the top depth values drop out? Something about the binning.

Do it once more, but setting the depth even shallower:

binned2 <- ctd.w.tides.dist %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 2.5) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate_at(5, round, 2)%>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(distance, tide, depth_m) %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarize(av_tmp = mean(temp_c))
`summarise()` has grouped output by 'distance', 'tide'. You can override using the `.groups` argument.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggplot(binned2,aes(x=distance,y=-1*(depth_m))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide))+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_contour_filled(aes(z=av_tmp), alpha = 0.8) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point(size =0.1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Distance from hatchery pens (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       fill = "Temperature (C)")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdTemp3metersDistance.pdf", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

For salinity and temp, let’s zoom in on the top 5 meters (we took samples from the first ~1 m)

# temp
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 5) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = temp_c, y = -1*(depth_m), color = distance)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Temperature (C)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Distance (m)")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdTempProfile3metersDistance.pdf", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Plotting a surface with salinity and longitude


binnedSalinity <- ctd.w.tides.dist %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 10) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate_at(5, round)%>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(distance, tide, depth_m) %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarize(av_salinity = mean(salinity))
`summarise()` has grouped output by 'distance', 'tide'. You can override using the `.groups` argument.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# oranize colors
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
mycolors <- colorRampPalette(brewer.pal(9, "Oranges"))(11)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
salplot <- ggplot(binnedSalinity, aes(x = distance, y = -1*(depth_m))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_contour_filled(aes(z = av_salinity), alpha = 0.8) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    geom_point(size = 0.1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    theme_bw() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
     theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
      axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
      axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
      labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
           x = "Distance from hatchery pens (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
           fill = "Salinity (PSU)") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_x_continuous(expand = c(0,0)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_y_continuous(expand = c(0,0.05))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
salplot
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdSalinity10metersDistance.png", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

binnedSal2 <- ctd.w.tides.dist %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 2.5) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate_at(5, round, 2)%>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(distance, tide, depth_m) %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarize(av_sal = mean(salinity))
`summarise()` has grouped output by 'distance', 'tide'. You can override using the `.groups` argument.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggplot(binnedSal2,aes(x=distance,y=-1*(depth_m))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  facet_grid(rows = vars(tide))+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_contour_filled(aes(z=av_sal), alpha = 0.8) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point(size =0.1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Distance from hatchery pens (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       fill = "Salinity (PSU)")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctdSalinity3metersDistance.png", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

library(patchwork)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
salplot + tempplot + plot_layout(nrow = 2) + plot_annotation(tag_levels = "A")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/ctd_data2021_dualplot.png", width = 8, height = 8)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(tide) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarise(max(salinity))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Density

density1 <- ctd.w.tides.dist %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(tide = ifelse(tide == "AM_incoming", "incoming tide (AM)", "outgoing tide (PM)")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(depth_m < 10) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate_at(5, round)%>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  group_by(distance, tide, depth_m) %>% 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  summarize(av_density = mean(density)) # the avg needs to be taken for proper plotting in this way.
`summarise()` has grouped output by 'distance', 'tide'. You can override using the `.groups` argument.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# ggplot(density1,aes(x=distance,y=-1*(depth_m))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   facet_grid(rows = vars(tide))+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   geom_contour_filled(aes(z=density), alpha = 0.8) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#     geom_point(size =0.1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   theme_bw()+
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#    theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#     axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#     axis.title.y = element_text(margin = margin(r=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#   labs(y = "Depth (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#        x = "Distance from hatchery pens (m)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#        fill = "Density (kg/m^3)")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#ggsave("pdf_outputs/ctdTemp10metersDistance.pdf", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Tide data

Tide data was obtained from the NOAA Tides website: tidesandcurrents.noaa.gov

https://tidesandcurrents.noaa.gov/waterlevels.html?id=9452210&units=standard&bdate=20210510&edate=20210511&timezone=LST/LDT&datum=MLLW&interval=6&action=

tides <- read_csv("../data/JuneauTides_2021May.csv",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                  col_types = cols_only(Date=col_date("%Y/%m/%d"),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                              `Time (LST/LDT)`=col_time("%H:%M"),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                              `Verified (ft)`=col_double())) 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# fix variable names
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.renamed <- tides %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  rename(time = `Time (LST/LDT)`, height_ft = `Verified (ft)`)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# create a merged column with date and time to then round to the hour as in the CTD data
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.renamed$newdate <- with(tides.renamed, as.POSIXct(paste(Date, time), format="%Y-%m-%d %H:%M:%S"))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.hour <- tides.renamed %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(round_time = round_date(newdate, unit = "hours")) %>% # round time stamps to the hour
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  separate(round_time, into = c("ymd", "hour"), sep = " ") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(hour = as_hms(hour)) 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Look at joining the tide data with the ctd data based on time

# install.packages("devtools")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#library(devtools)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
#devtools::install_github("ellisvalentiner/lubridateExtras")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# from the ctd time stamp, I need to separate the date from the time
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.w.tides.dist$time <- ymd_hms(ctd.w.tides.dist$time)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.times <- ctd.w.tides.dist %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(round_time = round_date(time, unit = "hours")) %>% # round time stamps to the hour
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  separate(round_time, into = c("ymd", "hour"), sep = " ") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(hour = as_hms(hour)) 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2021 <- tides.hour %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(Date == "2021-05-10" | Date == "2021-05-09") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  left_join(., ctd.times, by = c("hour", "ymd")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x=newdate, y=height_ft, color = distance)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    legend.title = element_text(margin = margin(b=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Tide height (ft)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Date-time",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Distance from hatchery pens (m)") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  scale_color_viridis_c(option = "plasma", direction = 1)
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2021
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/tideCycleSampling.png", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

# removing-distance-and-just-using-sampling-period
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2021 <- tides.hour %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(Date == "2021-05-10" | Date == "2021-05-09") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  left_join(., ctd.times, by = c("hour", "ymd")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(sampling_period = ifelse(is.na(ctd_sample), "no", "yes")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = newdate, y = height_ft, color = sampling_period)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    legend.title = element_text(margin = margin(b=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Tide height (ft)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Date-time",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Sampling period") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  #scale_color_viridis_c(option = "plasma", direction = -1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
scale_color_manual(values = c("gray", "darkgreen"))
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2021
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# read in tide data from 2022
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides2022 <- read_csv("../data/JuneauTides_2022May.csv",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                  col_types = cols_only(Date=col_date("%Y/%m/%d"),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                              `Time (LST/LDT)`=col_time("%H:%M"),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
                              `Verified (ft)`=col_double())) 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# fix variable names
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.renamed2 <- tides2022 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  rename(time = `Time (LST/LDT)`, height_ft = `Verified (ft)`)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# create a merged column with date and time to then round to the hour as in the CTD data
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.renamed2$newdate <- with(tides.renamed2, as.POSIXct(paste(Date, time), format="%Y-%m-%d %H:%M:%S"))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tides.hour2 <- tides.renamed2 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(round_time = round_date(newdate, unit = "hours")) %>% # round time stamps to the hour
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  separate(round_time, into = c("ymd", "hour"), sep = " ") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(hour = as_hms(hour))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# add distance to ctd_sample number
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ctd.times.2022 <- ctd.times.2022 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  left_join(., dist_time2022, by = "ctd_sample")
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2022 <- tides.hour2 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(Date == "2022-05-04" | Date == "2022-05-05") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  left_join(., ctd.times.2022, by = c("hour", "ymd")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(sampling_period = ifelse(is.na(ctd_sample), "no", "yes")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = newdate, y = height_ft, color = sampling_period)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    legend.title = element_text(margin = margin(b=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Tide height (ft)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Date-time",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Sampling period") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  #scale_color_viridis_c(option = "plasma", direction = -1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
scale_color_manual(values = c("gray", "darkgreen"))
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2022
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/tideCycleSampling2022.png", width = 8, height = 5)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

tides.hour2 %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  filter(Date == "2022-05-04" | Date == "2022-05-05") %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  left_join(., ctd.times.2022, by = c("hour", "ymd")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  mutate(sampling_period = ifelse(is.na(ctd_sample), "no", "yes")) %>%
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  ggplot(aes(x = newdate, y = height_ft, color = distance_from_pens)) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  geom_point() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme_bw() +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  theme(
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.x = element_text(margin = margin(t=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    axis.title.y = element_text(margin = margin(r=10)),
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
    legend.title = element_text(margin = margin(b=10))) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  labs(y = "Tide height (ft)",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       x = "Date-time",
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
       color = "Distance from hatchery pens (m)") +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
   scale_color_viridis_c(option = "plasma", direction = 1)
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

  
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
# double check the sampling to see if it overlaps slack tide?
tides.hour2 %>%
  filter(Date == "2022-05-05") %>%
  left_join(., ctd.times.2022, by = c("hour", "ymd")) %>%
  filter(tide == "AM_outgoing") %>%
  mutate(sampling_period = ifelse(is.na(ctd_sample), "no", "yes")) %>%
  filter(height_ft < min(height_ft)+1) %>%
  ggplot(aes(x = long, y = lat, color = newdate)) +
  geom_point()
Warning: Detected an unexpected many-to-many relationship between `x` and `y`.

Minimum tidal height was at 10:36; the parallel transect was sampled after 11 am, so it was as the tide turned.

# make supplemental figure
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
tidePlot2021 + tidePlot2022 + 
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  plot_layout(ncol = 1) +
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
  plot_annotation(tag_levels = "A")
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
ggsave("pdf_outputs/SIfigure_tideCycle_bothYears_v2.png", width = 8, height = 8)
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument

LS0tCnRpdGxlOiAiMDgtY3RkLWNhc3QtZGF0YSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKMTIgRmVicnVhcnkgMjAyMgoKQ1REIGNhc3RzIGZyb20gZUROQSBzYW1wbGluZyBvZmYgdGhlIFNhc2hpbiBvbiAxMCBNYXksIDIwMjEuCgpgYGB7ciBsb2FkLWxpYnJhcmllc30KbGlicmFyeSh0aWR5cikKbGlicmFyeShyZWFkcikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShobXMpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkobHVicmlkYXRlRXh0cmFzKQoKYGBgCgpgYGB7ciByZWFkLWluLWNzdi1maWxlc30KIyByZWFkIGluIGFsbCBmaWxlcyBpbiB0aGUgcmVoZWFkZWQgZGlyZWN0b3J5CiMgZGF0YUZpbGVzIDwtIGxhcHBseShTeXMuZ2xvYigiQ1REQ2FzdHMvcmVoZWFkZWQvKi5jc3YiKSwgcmVhZF9jc3YpCiMgCiMgIyB0dXJuIGVhY2ggb2YgdGhlIGRhdGEgZnJhbWVzIGluIHRoYXQgbGlzdCBpbnRvIGEgc2luZ2xlIGRhdGEgZnJhbWUKIyBjdGQuZGF0YSA8LSBkby5jYWxsKCJyYmluZCIsIGRhdGFGaWxlcykKCmN0ZC53LnRpZGVzLmRpc3QgPC0gcmVhZF9jc3YoIi4uL2RhdGEvY3RkRGF0YWZyYW1lLmNzdiIpICU+JQogIGZpbHRlcihkaXN0YW5jZSAhPSAxMDApCgoKYGBgCgoKYGBge3IgZGF0YS1jbGVhbi11cH0KIyBvcmdhbml6ZSB0aGUgaGVhZGVycywgZXRjLgojIGN0ZC5kYXRhMiA8LSBjdGQuZGF0YSAlPiUKIyAgIHJlbmFtZShwcmVzc3VyZV9kZWNpYmFyID0gYFByZXNzdXJlIChEZWNpYmFyKWAsIGRlcHRoX20gPSBgRGVwdGggKE1ldGVyKWAsIHRlbXBfYyA9IGBUZW1wZXJhdHVyZSAoQ2Vsc2l1cylgLCBjb25kdWN0aXZpdHkgPSBgQ29uZHVjdGl2aXR5IChNaWNyb1NpZW1lbnMgcGVyIENlbnRpbWV0ZXIpYCwgc3BfY29uZHVjdCA9IGBTcGVjaWZpYyBjb25kdWN0YW5jZSAoTWljcm9TaWVtZW5zIHBlciBDZW50aW1ldGVyKWAsIHNhbGluaXR5ID0gYFNhbGluaXR5IChQcmFjdGljYWwgU2FsaW5pdHkgU2NhbGUpYCwgc291bmRfdmVsb2NpdHkgPSBgU291bmQgdmVsb2NpdHkgKE1ldGVycyBwZXIgU2Vjb25kKWAsIGRlbnNpdHkgPSBgRGVuc2l0eSAoS2lsb2dyYW1zIHBlciBDdWJpYyBNZXRlcilgLCBmaWxlID0gYCUgRmlsZSBuYW1lYCwgbGF0ID0gYCUgU3RhcnQgbGF0aXR1ZGVgLCBsb25nID0gYCUgU3RhcnQgbG9uZ2l0dWRlYCwgZHVyYXRpb24gPSBgJSBDYXN0IGR1cmF0aW9uIChTZWNvbmRzKWAsIHRpbWUgPSBgJSBDYXN0IHRpbWUgKGxvY2FsKWApICU+JQojICAgc2VwYXJhdGUoZmlsZSwgaW50byA9IGMoTkEsIE5BLCAiY3RkX3NhbXBsZSIpLCBzZXAgPSAiXyIpICU+JQojICAgc2VsZWN0KGN0ZF9zYW1wbGUsIHRpbWUsIGxhdCwgbG9uZywgZGVwdGhfbSwgc2FsaW5pdHksIGRlbnNpdHksIHByZXNzdXJlX2RlY2liYXIsIHRlbXBfYywgY29uZHVjdGl2aXR5LCBzcF9jb25kdWN0LCBzb3VuZF92ZWxvY2l0eSwgZHVyYXRpb24pCiMgCiMgCiMgIyBhZGQgdGlkZSBpbmZvCiMgY3RkLncudGlkZXMgPC0gY3RkLmRhdGEyICU+JQojICAgbXV0YXRlKHRpZGUgPSBpZmVsc2UoaG91cihobXM6OmFzX2htcyh0aW1lKSkgPjEyLCAiUE1fb3V0Z29pbmciLCAiQU1faW5jb21pbmciKSkKIyAKIyBjdGQudy50aWRlcyAlPiUKIyAgIHNlbGVjdChsYXQpICU+JQojICAgdW5pcXVlKCkgJT4lCiMgICBhcnJhbmdlKGxhdCkKCmBgYAoKCgojIyBDb252ZXJ0IGxvbmdpdHVkZSB0byBtZXRlcnMgZnJvbSBjaHVtIHBlbnMKClRoaXMgd2lsbCBtYXRjaCB0aGUgb3RoZXIgcGxvdHMgaW4gdGhlIHNlcmllcy4KYGBge3J9CiMgbWV0YSA8LSByZWFkX2NzdigiLi4vbWV0YWRhdGEvYW1hbGdhX2NsZWFuX21ldGFkYXRhLmNzdiIpCiMgCiMgZGlzdCA8LSBtZXRhICU+JQojICAgZmlsdGVyKCFpcy5uYShkaXN0YW5jZSkpICU+JQojICAgYXJyYW5nZShkaXN0YW5jZSkgJT4lCiMgICBzZWxlY3QoZGlzdGFuY2UpICU+JQojICAgdW5pcXVlKCkKIyAKIyBkaXN0MnggPC0gZGlzdCAlPiUKIyAgIGJpbmRfcm93cyhkaXN0KQoKIyAjIGVhY2ggY2FzdCAoY3RkX3NhbXBsZSkgcmVwcmVzZW50cyBvbmUgb2YgdGhlIDgwbSBzYW1wbGluZyBpbnRlcnZhbHMKIyBjdGQudy5kaXN0IDwtIGN0ZC53LnRpZGVzICU+JQojICAgYXJyYW5nZSh0aW1lKSAlPiUKIyAgIHNlbGVjdCh0aW1lKSAlPiUKIyAgIHVuaXF1ZSgpICU+JQojICAgbXV0YXRlKGlkID0gcm93X251bWJlcigpKSAlPiUKIyAgIGJpbmRfY29scyhkaXN0MngpCiMgCiMgIyBiaW5kIGl0IGJhY2sgdG9nZXRoZXIKIyBjdGQudy50aWRlcy5kaXN0IDwtIGN0ZC53LnRpZGVzICU+JQojICAgbGVmdF9qb2luKC4sIGN0ZC53LmRpc3QpCiAgCmBgYAoKCgpgYGB7cn0KIyBRQzogYXJlIHRoZSBkYXRhIHdoYXQgd2UgdGhpbmsgdGhleSBhcmU/CmN0ZC53LnRpZGVzLmRpc3QgJT4lCiAgICBtdXRhdGUodGlkZSA9IGlmZWxzZSh0aWRlID09ICJBTV9pbmNvbWluZyIsICJpbmNvbWluZyB0aWRlIChBTSkiLCAib3V0Z29pbmcgdGlkZSAoUE0pIikpICU+JQogIGdncGxvdChhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGNvbG9yID0gdGlkZSwgbGluZXR5cGUgPSB0aWRlLCBsYWJlbCA9IGN0ZF9zYW1wbGUpKSArCiAjIGdlb21fbGluZSgpICsKICAjZ2VvbV9wb2ludChzaXplID0gMC4xKSsKICBnZW9tX3RleHQoc2l6ZSA9IDIuNSkrCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aWRlKSkgKwogIHRoZW1lX2J3KCkrCiAgIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKQogICkgKwogIGxhYnMoeSA9ICJMYXRpdHVkZSIsCiAgICAgICB4ID0gIkxvbmdpdHVkZSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZmlyZWJyaWNrMSIsICJtaWRuaWdodGJsdWUiKSkKCmdnc2F2ZSgicGRmX291dHB1dHMvY3RkU2ltcGxlTGF0TG9uLnBkZiIpCgpgYGAKCgoKT3V0cHV0IHRoYXQgZGF0YWZyYW1lIHNvIHRoYXQgSSBjYW4gcGxvdCB0aGUgdHJhbnNlY3Qgb24gdGhlIGJhdGh5IG1hcApgYGB7cn0KIyBjdGQudy50aWRlcy5kaXN0ICU+JQojICAgd3JpdGVfY3N2KCJjc3Zfb3V0cHV0cy9jdGREYXRhZnJhbWUuY3N2IikKCmBgYAoKCgpVbHRpbWF0ZWx5LCB0dXJuIHRoaXMgaW50byBhIG1hcCBvZiB0aGUgdHJhbnNlY3QgcmF0aGVyIHRoYW4gYW4geC15IHBsb3QuCgptYXgvbWluIHN1cmZhY2Ugd2F0ZXIgdGVtcGVyYXR1cmUgdnMuIGF0IGRlcHRoCmBgYHtyIHN1bW1hcnktd2F0ZXItdGVtcHN9CmN0ZC53LnRpZGVzLmRpc3QgJT4lCiAgI2ZpbHRlcihkaXN0YW5jZSA9PSAwKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0ZW1wX2MsIHkgPSAtMSpkZXB0aF9tLCBjb2xvciA9IHRpZGUpKSArCiAgZ2VvbV9wb2ludCgpCgoKYGBgCmBgYHtyIHRlbXAtYXQtMTBtLWRlcHRofQpjdGQudy50aWRlcy5kaXN0ICU+JQogIGZpbHRlcihkZXB0aF9tID4gOSAmIGRlcHRoX20gPCAxMSkgJT4lCiAgc3VtbWFyaXNlKG1pbih0ZW1wX2MpKQoKCmBgYAoKYGBge3IgdGVtcC1hdC1zdXJmYWNlfQpjdGQudy50aWRlcy5kaXN0ICU+JQogIGdyb3VwX2J5KHRpZGUpICU+JQogIGZpbHRlcihkZXB0aF9tID4gMSkgJT4lCiAgc3VtbWFyaXNlKG1pbih0ZW1wX2MpKQoKCgpgYGAKCgoKCiMjIFBsb3R0aW5nIENURCBwcm9maWxlcwoKYGBge3J9CiMgc2FsaW5pdHkKY3RkLncudGlkZXMuZGlzdCAlPiUKICBmaWx0ZXIoc2FsaW5pdHkgPiAyMCkgJT4lCiAgbXV0YXRlKHRpZGUgPSBpZmVsc2UodGlkZSA9PSAiQU1faW5jb21pbmciLCAiaW5jb21pbmcgdGlkZSAoQU0pIiwgIm91dGdvaW5nIHRpZGUgKFBNKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBkZW5zaXR5LCB5ID0gLTEqKGRlcHRoX20pLCBjb2xvciA9IGRpc3RhbmNlKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aWRlKSkgKwogIHRoZW1lX2J3KCkrCiAgIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKQogICkgKwogIGxhYnMoeSA9ICJEZXB0aCAobSkiLAogICAgICAgeCA9ICJEZW5zaXR5IiwKICAgICAgIGNvbG9yID0gIkRpc3RhbmNlIikKICAKCiNnZ3NhdmUoInBkZl9vdXRwdXRzL2N0ZFNhbGluaXR5UHJvZmlsZS5wZGYiLCB3aWR0aCA9IDgsIGhlaWdodCA9IDUpCmBgYApTYWxpbml0eTogem9vbWVkIGluCmBgYHtyfQojIHRlbXAKY3RkLncudGlkZXMuZGlzdCAlPiUKICAgIGZpbHRlcihzYWxpbml0eSA+IDIwKSAlPiUKICBtdXRhdGUodGlkZSA9IGlmZWxzZSh0aWRlID09ICJBTV9pbmNvbWluZyIsICJpbmNvbWluZyB0aWRlIChBTSkiLCAib3V0Z29pbmcgdGlkZSAoUE0pIikpICU+JQogIGZpbHRlcihkZXB0aF9tIDwgMTApICU+JSAjIHRvcCB0aHJlZSBtZXRlcnMgb2YgdGhlIHN1cmZhY2UKICBnZ3Bsb3QoYWVzKHggPSBkZW5zaXR5LCB5ID0gLTEqKGRlcHRoX20pLCBjb2xvciA9IGRpc3RhbmNlKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aWRlKSkgKwogIHRoZW1lX2J3KCkrCiAgIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKSkgKwogIGxhYnMoeSA9ICJEZXB0aCAobSkiLAogICAgICAgeCA9ICJEZW5zaXR5IChrZy9tXjMpIiwKICAgICAgIGNvbG9yID0gIkRpc3RhbmNlIChtKSIpCgojZ2dzYXZlKCJwZGZfb3V0cHV0cy9jdGRTYWxpbml0eVByb2ZpbGU1bS5wZGYiLCB3aWR0aCA9IDgsIGhlaWdodCA9IDUpCgpgYGAKCiMgUGxvdHRpbmcgYSBzdXJmYWNlIHdpdGggdGVtcGVyYXR1cmUgYW5kIGxvbmdpdHVkZQoKaHR0cHM6Ly9naXRodWIuY29tL2NhdGhtbWl0Y2hlbGwvcGxvdHRpbmdPY2VhbkRhdGFXaXRoUi93aWtpL0lycmVndWxhci1kYXRhCgpgYGB7cn0KYmlubmVkIDwtIGN0ZC53LnRpZGVzLmRpc3QgJT4lIAogICAgbXV0YXRlKHRpZGUgPSBpZmVsc2UodGlkZSA9PSAiQU1faW5jb21pbmciLCAiaW5jb21pbmcgdGlkZSAoQU0pIiwgIm91dGdvaW5nIHRpZGUgKFBNKSIpKSAlPiUKICBmaWx0ZXIoZGVwdGhfbSA8IDEwKSAlPiUKICBtdXRhdGVfYXQoNSwgcm91bmQpJT4lIAogIGdyb3VwX2J5KGRpc3RhbmNlLCB0aWRlLCBkZXB0aF9tKSAlPiUgCiAgc3VtbWFyaXplKGF2X3RtcCA9IG1lYW4odGVtcF9jKSkKCiMgZmxpcCBvcmRlciBzbyBoaWdoZXIgdGVtcHMgYXJlIGF0IHRoZSB0b3AhCmJpbm5lZAoKdGVtcHBsb3QgPC0gZ2dwbG90KGJpbm5lZCxhZXMoeD1kaXN0YW5jZSx5PS0xKihkZXB0aF9tKSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHRpZGUpKSsKICBnZW9tX2NvbnRvdXJfZmlsbGVkKGFlcyh6PWF2X3RtcCksIGFscGhhID0gMC44KSArCiAgICBnZW9tX3BvaW50KHNpemUgPTAuMSkgKwogIHRoZW1lX2J3KCkrCiAgIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKSkgKwogIGxhYnMoeSA9ICJEZXB0aCAobSkiLAogICAgICAgeCA9ICJEaXN0YW5jZSBmcm9tIGhhdGNoZXJ5IHBlbnMgKG0pIiwKICAgICAgIGZpbGwgPSAiVGVtcGVyYXR1cmUgKEMpIikgKwogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDAuMDUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsIGRpcmVjdGlvbiA9IC0xLAogICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUKSkKICAKCnRlbXBwbG90CgpnZ3NhdmUoInBkZl9vdXRwdXRzL2N0ZFRlbXAxMG1ldGVyc0Rpc3RhbmNlLnBuZyIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNSkKYGBgCldoeSBkbyBzb21lIG9mIHRoZSB0b3AgZGVwdGggdmFsdWVzIGRyb3Agb3V0PyBTb21ldGhpbmcgYWJvdXQgdGhlIGJpbm5pbmcuCgoKRG8gaXQgb25jZSBtb3JlLCBidXQgc2V0dGluZyB0aGUgZGVwdGggZXZlbiBzaGFsbG93ZXI6CgpgYGB7ciB0ZW1wLWJpbm5lZC0yfQpiaW5uZWQyIDwtIGN0ZC53LnRpZGVzLmRpc3QgJT4lIAogICAgbXV0YXRlKHRpZGUgPSBpZmVsc2UodGlkZSA9PSAiQU1faW5jb21pbmciLCAiaW5jb21pbmcgdGlkZSAoQU0pIiwgIm91dGdvaW5nIHRpZGUgKFBNKSIpKSAlPiUKICBmaWx0ZXIoZGVwdGhfbSA8IDIuNSkgJT4lCiAgbXV0YXRlX2F0KDUsIHJvdW5kLCAyKSU+JSAKICBncm91cF9ieShkaXN0YW5jZSwgdGlkZSwgZGVwdGhfbSkgJT4lIAogIHN1bW1hcml6ZShhdl90bXAgPSBtZWFuKHRlbXBfYykpCgoKZ2dwbG90KGJpbm5lZDIsYWVzKHg9ZGlzdGFuY2UseT0tMSooZGVwdGhfbSkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aWRlKSkrCiAgZ2VvbV9jb250b3VyX2ZpbGxlZChhZXMoej1hdl90bXApLCBhbHBoYSA9IDAuOCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9MC4xKSArCiAgdGhlbWVfYncoKSsKICAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHQ9MTApKSwKICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4ocj0xMCkpKSArCiAgbGFicyh5ID0gIkRlcHRoIChtKSIsCiAgICAgICB4ID0gIkRpc3RhbmNlIGZyb20gaGF0Y2hlcnkgcGVucyAobSkiLAogICAgICAgZmlsbCA9ICJUZW1wZXJhdHVyZSAoQykiKQoKZ2dzYXZlKCJwZGZfb3V0cHV0cy9jdGRUZW1wM21ldGVyc0Rpc3RhbmNlLnBkZiIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNSkKYGBgCgoKRm9yIHNhbGluaXR5IGFuZCB0ZW1wLCBsZXQncyB6b29tIGluIG9uIHRoZSB0b3AgNSBtZXRlcnMgKHdlIHRvb2sgc2FtcGxlcyBmcm9tIHRoZSBmaXJzdCB+MSBtKQpgYGB7cn0KIyB0ZW1wCmN0ZC53LnRpZGVzLmRpc3QgJT4lCiAgbXV0YXRlKHRpZGUgPSBpZmVsc2UodGlkZSA9PSAiQU1faW5jb21pbmciLCAiaW5jb21pbmcgdGlkZSAoQU0pIiwgIm91dGdvaW5nIHRpZGUgKFBNKSIpKSAlPiUKICBmaWx0ZXIoZGVwdGhfbSA8IDUpICU+JQogIGdncGxvdChhZXMoeCA9IHRlbXBfYywgeSA9IC0xKihkZXB0aF9tKSwgY29sb3IgPSBkaXN0YW5jZSkpICsKICBnZW9tX3BvaW50KCkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGlkZSkpICsKICB0aGVtZV9idygpKwogICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4odD0xMCkpLAogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihyPTEwKSkpICsKICBsYWJzKHkgPSAiRGVwdGggKG0pIiwKICAgICAgIHggPSAiVGVtcGVyYXR1cmUgKEMpIiwKICAgICAgIGNvbG9yID0gIkRpc3RhbmNlIChtKSIpCgpnZ3NhdmUoInBkZl9vdXRwdXRzL2N0ZFRlbXBQcm9maWxlM21ldGVyc0Rpc3RhbmNlLnBkZiIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNSkKCmBgYAoKIyMjIFBsb3R0aW5nIGEgc3VyZmFjZSB3aXRoIHNhbGluaXR5IGFuZCBsb25naXR1ZGUKCgpgYGB7ciBzYWxpbml0eS1wbG90fQoKYmlubmVkU2FsaW5pdHkgPC0gY3RkLncudGlkZXMuZGlzdCAlPiUgCiAgICBtdXRhdGUodGlkZSA9IGlmZWxzZSh0aWRlID09ICJBTV9pbmNvbWluZyIsICJpbmNvbWluZyB0aWRlIChBTSkiLCAib3V0Z29pbmcgdGlkZSAoUE0pIikpICU+JQogIGZpbHRlcihkZXB0aF9tIDwgMTApICU+JQogIG11dGF0ZV9hdCg1LCByb3VuZCklPiUgCiAgZ3JvdXBfYnkoZGlzdGFuY2UsIHRpZGUsIGRlcHRoX20pICU+JSAKICBzdW1tYXJpemUoYXZfc2FsaW5pdHkgPSBtZWFuKHNhbGluaXR5KSkKCiMgb3Jhbml6ZSBjb2xvcnMKbXljb2xvcnMgPC0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDksICJPcmFuZ2VzIikpKDExKQoKCnNhbHBsb3QgPC0gZ2dwbG90KGJpbm5lZFNhbGluaXR5LCBhZXMoeCA9IGRpc3RhbmNlLCB5ID0gLTEqKGRlcHRoX20pKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGlkZSkpICsKICBnZW9tX2NvbnRvdXJfZmlsbGVkKGFlcyh6ID0gYXZfc2FsaW5pdHkpLCBhbHBoYSA9IDAuOCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMC4xKSArCiAgICB0aGVtZV9idygpICsKICAgICB0aGVtZSgKICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4ocj0xMCkpKSArCiAgICAgIGxhYnMoeSA9ICJEZXB0aCAobSkiLAogICAgICAgICAgIHggPSAiRGlzdGFuY2UgZnJvbSBoYXRjaGVyeSBwZW5zIChtKSIsCiAgICAgICAgICAgZmlsbCA9ICJTYWxpbml0eSAoUFNVKSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwLjA1KSkKCgpzYWxwbG90CgpnZ3NhdmUoInBkZl9vdXRwdXRzL2N0ZFNhbGluaXR5MTBtZXRlcnNEaXN0YW5jZS5wbmciLCB3aWR0aCA9IDgsIGhlaWdodCA9IDUpCmBgYAoKYGBge3Igc2FsaW5pdHktYmlubmVkLTJ9CmJpbm5lZFNhbDIgPC0gY3RkLncudGlkZXMuZGlzdCAlPiUgCiAgICBtdXRhdGUodGlkZSA9IGlmZWxzZSh0aWRlID09ICJBTV9pbmNvbWluZyIsICJpbmNvbWluZyB0aWRlIChBTSkiLCAib3V0Z29pbmcgdGlkZSAoUE0pIikpICU+JQogIGZpbHRlcihkZXB0aF9tIDwgMi41KSAlPiUKICBtdXRhdGVfYXQoNSwgcm91bmQsIDIpJT4lIAogIGdyb3VwX2J5KGRpc3RhbmNlLCB0aWRlLCBkZXB0aF9tKSAlPiUgCiAgc3VtbWFyaXplKGF2X3NhbCA9IG1lYW4oc2FsaW5pdHkpKQoKCmdncGxvdChiaW5uZWRTYWwyLGFlcyh4PWRpc3RhbmNlLHk9LTEqKGRlcHRoX20pKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModGlkZSkpKwogIGdlb21fY29udG91cl9maWxsZWQoYWVzKHo9YXZfc2FsKSwgYWxwaGEgPSAwLjgpICsKICBnZW9tX3BvaW50KHNpemUgPTAuMSkgKwogIHRoZW1lX2J3KCkrCiAgIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKSkgKwogIGxhYnMoeSA9ICJEZXB0aCAobSkiLAogICAgICAgeCA9ICJEaXN0YW5jZSBmcm9tIGhhdGNoZXJ5IHBlbnMgKG0pIiwKICAgICAgIGZpbGwgPSAiU2FsaW5pdHkgKFBTVSkiKQoKZ2dzYXZlKCJwZGZfb3V0cHV0cy9jdGRTYWxpbml0eTNtZXRlcnNEaXN0YW5jZS5wbmciLCB3aWR0aCA9IDgsIGhlaWdodCA9IDUpCmBgYAoKCmBgYHtyIG1ha2UtU0ktZmlndXJlLVMyfQpsaWJyYXJ5KHBhdGNod29yaykKCnNhbHBsb3QgKyB0ZW1wcGxvdCArIHBsb3RfbGF5b3V0KG5yb3cgPSAyKSArIHBsb3RfYW5ub3RhdGlvbih0YWdfbGV2ZWxzID0gIkEiKQoKZ2dzYXZlKCJwZGZfb3V0cHV0cy9jdGRfZGF0YTIwMjFfZHVhbHBsb3QucG5nIiwgd2lkdGggPSA4LCBoZWlnaHQgPSA4KQpgYGAKCgpgYGB7cn0KY3RkLncudGlkZXMuZGlzdCAlPiUKICBncm91cF9ieSh0aWRlKSAlPiUKICBzdW1tYXJpc2UobWF4KHNhbGluaXR5KSkKYGBgCgoKCgpEZW5zaXR5CgpgYGB7cn0KZGVuc2l0eTEgPC0gY3RkLncudGlkZXMuZGlzdCAlPiUgCiAgbXV0YXRlKHRpZGUgPSBpZmVsc2UodGlkZSA9PSAiQU1faW5jb21pbmciLCAiaW5jb21pbmcgdGlkZSAoQU0pIiwgIm91dGdvaW5nIHRpZGUgKFBNKSIpKSAlPiUKICBmaWx0ZXIoZGVwdGhfbSA8IDEwKSAlPiUKICBtdXRhdGVfYXQoNSwgcm91bmQpJT4lIAogIGdyb3VwX2J5KGRpc3RhbmNlLCB0aWRlLCBkZXB0aF9tKSAlPiUgCiAgc3VtbWFyaXplKGF2X2RlbnNpdHkgPSBtZWFuKGRlbnNpdHkpKSAjIHRoZSBhdmcgbmVlZHMgdG8gYmUgdGFrZW4gZm9yIHByb3BlciBwbG90dGluZyBpbiB0aGlzIHdheS4KCiMgZ2dwbG90KGRlbnNpdHkxLGFlcyh4PWRpc3RhbmNlLHk9LTEqKGRlcHRoX20pKSkgKwojICAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh0aWRlKSkrCiMgICBnZW9tX2NvbnRvdXJfZmlsbGVkKGFlcyh6PWRlbnNpdHkpLCBhbHBoYSA9IDAuOCkgKwojICAgICBnZW9tX3BvaW50KHNpemUgPTAuMSkgKwojICAgdGhlbWVfYncoKSsKIyAgICB0aGVtZSgKIyAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiMgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4ocj0xMCkpKSArCiMgICBsYWJzKHkgPSAiRGVwdGggKG0pIiwKIyAgICAgICAgeCA9ICJEaXN0YW5jZSBmcm9tIGhhdGNoZXJ5IHBlbnMgKG0pIiwKIyAgICAgICAgZmlsbCA9ICJEZW5zaXR5IChrZy9tXjMpIikKCiNnZ3NhdmUoInBkZl9vdXRwdXRzL2N0ZFRlbXAxMG1ldGVyc0Rpc3RhbmNlLnBkZiIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNSkKYGBgCgoKCiMjIFRpZGUgZGF0YQoKVGlkZSBkYXRhIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBOT0FBIFRpZGVzIHdlYnNpdGU6IHRpZGVzYW5kY3VycmVudHMubm9hYS5nb3YKCmh0dHBzOi8vdGlkZXNhbmRjdXJyZW50cy5ub2FhLmdvdi93YXRlcmxldmVscy5odG1sP2lkPTk0NTIyMTAmdW5pdHM9c3RhbmRhcmQmYmRhdGU9MjAyMTA1MTAmZWRhdGU9MjAyMTA1MTEmdGltZXpvbmU9TFNUL0xEVCZkYXR1bT1NTExXJmludGVydmFsPTYmYWN0aW9uPQpgYGB7ciByZWFkLWluLXRpZGUtZGF0YX0KdGlkZXMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvSnVuZWF1VGlkZXNfMjAyMU1heS5jc3YiLAogICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzX29ubHkoRGF0ZT1jb2xfZGF0ZSgiJVkvJW0vJWQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFRpbWUgKExTVC9MRFQpYD1jb2xfdGltZSgiJUg6JU0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFZlcmlmaWVkIChmdClgPWNvbF9kb3VibGUoKSkpIAojIGZpeCB2YXJpYWJsZSBuYW1lcwp0aWRlcy5yZW5hbWVkIDwtIHRpZGVzICU+JQogIHJlbmFtZSh0aW1lID0gYFRpbWUgKExTVC9MRFQpYCwgaGVpZ2h0X2Z0ID0gYFZlcmlmaWVkIChmdClgKQoKIyBjcmVhdGUgYSBtZXJnZWQgY29sdW1uIHdpdGggZGF0ZSBhbmQgdGltZSB0byB0aGVuIHJvdW5kIHRvIHRoZSBob3VyIGFzIGluIHRoZSBDVEQgZGF0YQp0aWRlcy5yZW5hbWVkJG5ld2RhdGUgPC0gd2l0aCh0aWRlcy5yZW5hbWVkLCBhcy5QT1NJWGN0KHBhc3RlKERhdGUsIHRpbWUpLCBmb3JtYXQ9IiVZLSVtLSVkICVIOiVNOiVTIikpCgp0aWRlcy5ob3VyIDwtIHRpZGVzLnJlbmFtZWQgJT4lCiAgbXV0YXRlKHJvdW5kX3RpbWUgPSByb3VuZF9kYXRlKG5ld2RhdGUsIHVuaXQgPSAiaG91cnMiKSkgJT4lICMgcm91bmQgdGltZSBzdGFtcHMgdG8gdGhlIGhvdXIKICBzZXBhcmF0ZShyb3VuZF90aW1lLCBpbnRvID0gYygieW1kIiwgImhvdXIiKSwgc2VwID0gIiAiKSAlPiUKICBtdXRhdGUoaG91ciA9IGFzX2htcyhob3VyKSkgCmBgYApMb29rIGF0IGpvaW5pbmcgdGhlIHRpZGUgZGF0YSB3aXRoIHRoZSBjdGQgZGF0YSBiYXNlZCBvbiB0aW1lCgpgYGB7ciBwbG90LXRpZGFsLWN5Y2xlLTIwMjF9CiMgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQojbGlicmFyeShkZXZ0b29scykKI2RldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiZWxsaXN2YWxlbnRpbmVyL2x1YnJpZGF0ZUV4dHJhcyIpCgojIGZyb20gdGhlIGN0ZCB0aW1lIHN0YW1wLCBJIG5lZWQgdG8gc2VwYXJhdGUgdGhlIGRhdGUgZnJvbSB0aGUgdGltZQpjdGQudy50aWRlcy5kaXN0JHRpbWUgPC0geW1kX2htcyhjdGQudy50aWRlcy5kaXN0JHRpbWUpCgoKY3RkLnRpbWVzIDwtIGN0ZC53LnRpZGVzLmRpc3QgJT4lCiAgbXV0YXRlKHJvdW5kX3RpbWUgPSByb3VuZF9kYXRlKHRpbWUsIHVuaXQgPSAiaG91cnMiKSkgJT4lICMgcm91bmQgdGltZSBzdGFtcHMgdG8gdGhlIGhvdXIKICBzZXBhcmF0ZShyb3VuZF90aW1lLCBpbnRvID0gYygieW1kIiwgImhvdXIiKSwgc2VwID0gIiAiKSAlPiUKICBtdXRhdGUoaG91ciA9IGFzX2htcyhob3VyKSkgCiAgCgp0aWRlUGxvdDIwMjEgPC0gdGlkZXMuaG91ciAlPiUKICBmaWx0ZXIoRGF0ZSA9PSAiMjAyMS0wNS0xMCIgfCBEYXRlID09ICIyMDIxLTA1LTA5IikgJT4lCiAgbGVmdF9qb2luKC4sIGN0ZC50aW1lcywgYnkgPSBjKCJob3VyIiwgInltZCIpKSAlPiUKICBnZ3Bsb3QoYWVzKHg9bmV3ZGF0ZSwgeT1oZWlnaHRfZnQsIGNvbG9yID0gZGlzdGFuY2UpKSArCiAgZ2VvbV9wb2ludCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZSgKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4odD0xMCkpLAogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihyPTEwKSksCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKGI9MTApKSkgKwogIGxhYnMoeSA9ICJUaWRlIGhlaWdodCAoZnQpIiwKICAgICAgIHggPSAiRGF0ZS10aW1lIiwKICAgICAgIGNvbG9yID0gIkRpc3RhbmNlIGZyb20gaGF0Y2hlcnkgcGVucyAobSkiKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpc19jKG9wdGlvbiA9ICJwbGFzbWEiLCBkaXJlY3Rpb24gPSAxKQogIAp0aWRlUGxvdDIwMjEKCmdnc2F2ZSgicGRmX291dHB1dHMvdGlkZUN5Y2xlU2FtcGxpbmcucG5nIiwgd2lkdGggPSA4LCBoZWlnaHQgPSA1KQoKYGBgCgpgYGB7ciBhbHRlcm5hdGl2ZS1wbG90LTIwMjF9CiMgcmVtb3ZpbmctZGlzdGFuY2UtYW5kLWp1c3QtdXNpbmctc2FtcGxpbmctcGVyaW9kCgojIHRpZGVQbG90MjAyMSA8LSB0aWRlcy5ob3VyICU+JQojICAgZmlsdGVyKERhdGUgPT0gIjIwMjEtMDUtMTAiIHwgRGF0ZSA9PSAiMjAyMS0wNS0wOSIpICU+JQojICAgbGVmdF9qb2luKC4sIGN0ZC50aW1lcywgYnkgPSBjKCJob3VyIiwgInltZCIpKSAlPiUKIyAgIG11dGF0ZShzYW1wbGluZ19wZXJpb2QgPSBpZmVsc2UoaXMubmEoY3RkX3NhbXBsZSksICJubyIsICJ5ZXMiKSkgJT4lCiMgICBnZ3Bsb3QoYWVzKHggPSBuZXdkYXRlLCB5ID0gaGVpZ2h0X2Z0LCBjb2xvciA9IHNhbXBsaW5nX3BlcmlvZCkpICsKIyAgIGdlb21fcG9pbnQoKSArCiMgICB0aGVtZV9idygpICsKIyAgIHRoZW1lKAojICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHQ9MTApKSwKIyAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihyPTEwKSksCiMgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4oYj0xMCkpKSArCiMgICBsYWJzKHkgPSAiVGlkZSBoZWlnaHQgKGZ0KSIsCiMgICAgICAgIHggPSAiRGF0ZS10aW1lIiwKIyAgICAgICAgY29sb3IgPSAiU2FtcGxpbmcgcGVyaW9kIikgKwojICAgI3NjYWxlX2NvbG9yX3ZpcmlkaXNfYyhvcHRpb24gPSAicGxhc21hIiwgZGlyZWN0aW9uID0gLTEpICsKIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JheSIsICJkYXJrZ3JlZW4iKSkKIyAgCiMgdGlkZVBsb3QyMDIxCgoKYGBgCgoKCgpgYGB7ciBpbXBvcnQtdGlkZS1kYXRhLTIwMjJ9CiMgcmVhZCBpbiB0aWRlIGRhdGEgZnJvbSAyMDIyCnRpZGVzMjAyMiA8LSByZWFkX2NzdigiLi4vZGF0YS9KdW5lYXVUaWRlc18yMDIyTWF5LmNzdiIsCiAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHNfb25seShEYXRlPWNvbF9kYXRlKCIlWS8lbS8lZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVGltZSAoTFNUL0xEVClgPWNvbF90aW1lKCIlSDolTSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVmVyaWZpZWQgKGZ0KWA9Y29sX2RvdWJsZSgpKSkgCiMgZml4IHZhcmlhYmxlIG5hbWVzCnRpZGVzLnJlbmFtZWQyIDwtIHRpZGVzMjAyMiAlPiUKICByZW5hbWUodGltZSA9IGBUaW1lIChMU1QvTERUKWAsIGhlaWdodF9mdCA9IGBWZXJpZmllZCAoZnQpYCkKCiMgY3JlYXRlIGEgbWVyZ2VkIGNvbHVtbiB3aXRoIGRhdGUgYW5kIHRpbWUgdG8gdGhlbiByb3VuZCB0byB0aGUgaG91ciBhcyBpbiB0aGUgQ1REIGRhdGEKdGlkZXMucmVuYW1lZDIkbmV3ZGF0ZSA8LSB3aXRoKHRpZGVzLnJlbmFtZWQyLCBhcy5QT1NJWGN0KHBhc3RlKERhdGUsIHRpbWUpLCBmb3JtYXQ9IiVZLSVtLSVkICVIOiVNOiVTIikpCgp0aWRlcy5ob3VyMiA8LSB0aWRlcy5yZW5hbWVkMiAlPiUKICBtdXRhdGUocm91bmRfdGltZSA9IHJvdW5kX2RhdGUobmV3ZGF0ZSwgdW5pdCA9ICJob3VycyIpKSAlPiUgIyByb3VuZCB0aW1lIHN0YW1wcyB0byB0aGUgaG91cgogIHNlcGFyYXRlKHJvdW5kX3RpbWUsIGludG8gPSBjKCJ5bWQiLCAiaG91ciIpLCBzZXAgPSAiICIpICU+JQogIG11dGF0ZShob3VyID0gYXNfaG1zKGhvdXIpKQpgYGAKCmBgYHtyIENURC1kYXRhLTIwMjJ9CiMgaW1wb3J0IENURCBkYXRhIGZvciBNYXktNQpjdGQuMjAyMiA8LSByZWFkX2NzdigiLi4vZGF0YS8yMDIyY3RkRGF0YWZyYW1lLmNzdiIpCgojIGdyYWIgdGhlIGRhdGEgZm9yIE1heSA1IGFuZCBvbmUgdGlkZSBmb3IgZGF0YSBwb2ludHMgZm9yIHRoZSBtYXAKb25lLnNldC4yMDIyIDwtIGN0ZC4yMDIyICU+JQogIGZpbHRlcihzdHJfZGV0ZWN0KHRpbWUsICIyMDIyLTA1LTA1IikpICU+JQogICNkcGx5cjo6c2VsZWN0KHRpbWUsIGN0ZF9zYW1wbGUsIGxhdCwgbG9uZykgJT4lCiAgdW5pcXVlKCkgJT4lCiAgZmlsdGVyKCFjdGRfc2FtcGxlICVpbiUgYygiMTYzMDI0IiwgIjE5MTkzNSIsICIxNzUzMzciLCAiMTg1MDQ3IikpICU+JQogIG11dGF0ZShZZWFyID0gIjIwMjIiKQoKb25lLnNldC4yMDIyCgojIGZyb20gdGhlIGN0ZCB0aW1lIHN0YW1wLCBJIG5lZWQgdG8gc2VwYXJhdGUgdGhlIGRhdGUgZnJvbSB0aGUgdGltZQpvbmUuc2V0LjIwMjIkdGltZSA8LSB5bWRfaG1zKG9uZS5zZXQuMjAyMiR0aW1lKQoKY3RkLnRpbWVzLjIwMjIgPC0gb25lLnNldC4yMDIyICU+JQogIG11dGF0ZShyb3VuZF90aW1lID0gcm91bmRfZGF0ZSh0aW1lLCB1bml0ID0gImhvdXJzIikpICU+JSAjIHJvdW5kIHRpbWUgc3RhbXBzIHRvIHRoZSBob3VyCiAgc2VwYXJhdGUocm91bmRfdGltZSwgaW50byA9IGMoInltZCIsICJob3VyIiksIHNlcCA9ICIgIikgJT4lCiAgbXV0YXRlKGhvdXIgPSBhc19obXMoaG91cikpCiAgCiMgcmVhZCBpbiBtZXRhZGF0YSBmb3IgZGlzdGFuY2UgZnJvbSBwZW5zIGFzc29jaWF0ZWQgd2l0aCBjdGQgdGltZXMKZGlzdF90aW1lMjAyMiA8LSByZWFkX2NzdigiY3N2X291dHB1dHMvMjAyMl9jdGRfZ3JwX21ldGFkYXRhLmNzdiIpICU+JQogIGRwbHlyOjpzZWxlY3QoY3RkX3NhbXBsZSwgdGlkZSwgZGlzdGFuY2VfZnJvbV9wZW5zLCBzYW1wbGVfY29kZSkgJT4lCiAgdW5pcXVlKCkKCiMgYWRkIGRpc3RhbmNlIHRvIGN0ZF9zYW1wbGUgbnVtYmVyCmN0ZC50aW1lcy4yMDIyIDwtIGN0ZC50aW1lcy4yMDIyICU+JQogIGxlZnRfam9pbiguLCBkaXN0X3RpbWUyMDIyLCBieSA9ICJjdGRfc2FtcGxlIikKYGBgCgoKYGBge3IgcGxvdC10aWRhbC1jeWNsZS0yMDIyfQp0aWRlUGxvdDIwMjIgPC0gdGlkZXMuaG91cjIgJT4lCiAgZmlsdGVyKERhdGUgPT0gIjIwMjItMDUtMDQiIHwgRGF0ZSA9PSAiMjAyMi0wNS0wNSIpICU+JQogIGxlZnRfam9pbiguLCBjdGQudGltZXMuMjAyMiwgYnkgPSBjKCJob3VyIiwgInltZCIpKSAlPiUKICBtdXRhdGUoc2FtcGxpbmdfcGVyaW9kID0gaWZlbHNlKGlzLm5hKGN0ZF9zYW1wbGUpLCAibm8iLCAieWVzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG5ld2RhdGUsIHkgPSBoZWlnaHRfZnQsIGNvbG9yID0gc2FtcGxpbmdfcGVyaW9kKSkgKwogIGdlb21fcG9pbnQoKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUoCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHQ9MTApKSwKICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4ocj0xMCkpLAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbihiPTEwKSkpICsKICBsYWJzKHkgPSAiVGlkZSBoZWlnaHQgKGZ0KSIsCiAgICAgICB4ID0gIkRhdGUtdGltZSIsCiAgICAgICBjb2xvciA9ICJTYW1wbGluZyBwZXJpb2QiKSArCiAgI3NjYWxlX2NvbG9yX3ZpcmlkaXNfYyhvcHRpb24gPSAicGxhc21hIiwgZGlyZWN0aW9uID0gLTEpICsKc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImdyYXkiLCAiZGFya2dyZWVuIikpCgogIAp0aWRlUGxvdDIwMjIKCmdnc2F2ZSgicGRmX291dHB1dHMvdGlkZUN5Y2xlU2FtcGxpbmcyMDIyLnBuZyIsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNSkKCmBgYAoKCmBgYHtyIG1hcHBpbmctZGlzdGFuY2UtZnJvbS1wZW5zLW9udG8tdGlkZXN9CnRpZGVzLmhvdXIyICU+JQogIGZpbHRlcihEYXRlID09ICIyMDIyLTA1LTA0IiB8IERhdGUgPT0gIjIwMjItMDUtMDUiKSAlPiUKICBsZWZ0X2pvaW4oLiwgY3RkLnRpbWVzLjIwMjIsIGJ5ID0gYygiaG91ciIsICJ5bWQiKSkgJT4lCiAgbXV0YXRlKHNhbXBsaW5nX3BlcmlvZCA9IGlmZWxzZShpcy5uYShjdGRfc2FtcGxlKSwgIm5vIiwgInllcyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBuZXdkYXRlLCB5ID0gaGVpZ2h0X2Z0LCBjb2xvciA9IGRpc3RhbmNlX2Zyb21fcGVucykpICsKICBnZW9tX3BvaW50KCkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KG1hcmdpbiA9IG1hcmdpbih0PTEwKSksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQobWFyZ2luID0gbWFyZ2luKHI9MTApKSwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChtYXJnaW4gPSBtYXJnaW4oYj0xMCkpKSArCiAgbGFicyh5ID0gIlRpZGUgaGVpZ2h0IChmdCkiLAogICAgICAgeCA9ICJEYXRlLXRpbWUiLAogICAgICAgY29sb3IgPSAiRGlzdGFuY2UgZnJvbSBoYXRjaGVyeSBwZW5zIChtKSIpICsKICAgc2NhbGVfY29sb3JfdmlyaWRpc19jKG9wdGlvbiA9ICJwbGFzbWEiLCBkaXJlY3Rpb24gPSAxKQogIApgYGAKCgoKYGBge3J9CiMgZG91YmxlIGNoZWNrIHRoZSBzYW1wbGluZyB0byBzZWUgaWYgaXQgb3ZlcmxhcHMgc2xhY2sgdGlkZT8KdGlkZXMuaG91cjIgJT4lCiAgZmlsdGVyKERhdGUgPT0gIjIwMjItMDUtMDUiKSAlPiUKICBsZWZ0X2pvaW4oLiwgY3RkLnRpbWVzLjIwMjIsIGJ5ID0gYygiaG91ciIsICJ5bWQiKSkgJT4lCiAgZmlsdGVyKHRpZGUgPT0gIkFNX291dGdvaW5nIikgJT4lCiAgbXV0YXRlKHNhbXBsaW5nX3BlcmlvZCA9IGlmZWxzZShpcy5uYShjdGRfc2FtcGxlKSwgIm5vIiwgInllcyIpKSAlPiUKICBmaWx0ZXIoaGVpZ2h0X2Z0IDwgbWluKGhlaWdodF9mdCkrMSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgY29sb3IgPSBuZXdkYXRlKSkgKwogIGdlb21fcG9pbnQoKQoKYGBgCk1pbmltdW0gdGlkYWwgaGVpZ2h0IHdhcyBhdCAxMDozNjsgdGhlIHBhcmFsbGVsIHRyYW5zZWN0IHdhcyBzYW1wbGVkIGFmdGVyIDExIGFtLCBzbyBpdCB3YXMgYXMgdGhlIHRpZGUgdHVybmVkLgoKCgpgYGB7ciBjb21iaW5lLXBsb3RzLWJvdGgteWVhcnN9CiMgbWFrZSBzdXBwbGVtZW50YWwgZmlndXJlCnRpZGVQbG90MjAyMSArIHRpZGVQbG90MjAyMiArIAogIHBsb3RfbGF5b3V0KG5jb2wgPSAxKSArCiAgcGxvdF9hbm5vdGF0aW9uKHRhZ19sZXZlbHMgPSAiQSIpCgpnZ3NhdmUoInBkZl9vdXRwdXRzL1NJZmlndXJlX3RpZGVDeWNsZV9ib3RoWWVhcnNfdjIucG5nIiwgd2lkdGggPSA4LCBoZWlnaHQgPSA4KQoKYGBgCgo=